Fix reference counting for SplatAccumulator during updates #200
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While looking into #192 and #193 I noticed the reference counting of
SplatAccumulatorswasn't always correct. There were several ways it could go wrong, resulting in a range of issues. Luckily the resulting changeset is small, but tracking them down wasn't so easy. With these changes the ref counting should work correctly. There's still some possibilities for viewpoints to keep hold of accumulators starving theSparkRenderer.The following changes were made:
refCountof 1, as theSparkRendererimmediately uses it as itsactiveaccumulatororiginChangedbetween currentviewToWorldand theviewToWorldof the newly retrieved accumulator. Previously this compared to the active accumulator, but the one retrieved from the pool might be olderSparkViewpointkeep track of its two references (pending.accumulatoranddisplay.accumulator). Before it kept a maximum of 1 reference, but since sorting happens asynchronous there could be in-flight sorting operations using anaccumulatorthat was already released.viewToWorldand trigger aprepareViewpoint. Otherwise there'd be a window for aSparkViewpointto have mismatchedaccumulatorandviewToWorld